package ctr.eleve;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;

import jdbc.Connexion;
import metier.Eleve;
import metier.Stage;
import metier.jdbc.EleveJdbc;
import vue.MenuControle;
import vue.eleve.JPanAffStageEleve;
import configuration.MessageAppli;

public class GestAfficherStageEleve implements ActionListener, MouseListener{

	private JPanAffStageEleve jPanAffStageEleve;
	
	/**
	 * Constructeur permettant d'avoir accès au jPan pour acceder à la comboBox.
	 * @param jPanSuppStage
	 */
	public GestAfficherStageEleve(JPanAffStageEleve jPanAffStage) {
		this.jPanAffStageEleve = jPanAffStage;
	}

	@Override
	public void actionPerformed(ActionEvent actionEvent) {
		
		// Test la provenance de l'action.
		if (actionEvent.getSource() instanceof JButton) {
			afficher();
		}else if (actionEvent.getSource() instanceof JComboBox){
			afficher();
		}
	}
	
	/**
	 * Permet de gerer l'affichage des eleves / stages 
	 */
	public void afficher(){
		if ( jPanAffStageEleve.getjComboBox().getSelectedItem() != null ){
			// On recupere le stage séléctionné.
			Stage stage = (Stage) jPanAffStageEleve.getjComboBox().getSelectedItem(); 
			jPanAffStageEleve.setStage(stage);
			
			// On affiche la listes des eleves.
			MenuControle.afficherPan(new JPanAffStageEleve(jPanAffStageEleve));
		}else{
			JOptionPane.showMessageDialog(null, MessageAppli.MSG_STAGE_AUCUN_STAGE,
					MessageAppli.MSG_TITRE_INFO, JOptionPane.WARNING_MESSAGE);
		}
	}

	/**
	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
	 * Suppression de l'eleve du stage.
	 */
	@Override
	public void mouseClicked(MouseEvent e) {
		// Demande de confirmation.
		int ok = JOptionPane.showConfirmDialog(this.jPanAffStageEleve, 
					MessageAppli.MSG_STAGE_ELEVE_CONFIRM_SUPP, "Information", JOptionPane.OK_OPTION);
		if ( ok == 0){
			// Mise à jour de l'eleve.
			// TODO Gerer les eleves qui n'ont pas de stage.
			int index = this.jPanAffStageEleve.getPanJTable().getJtable().getSelectedRow();
			Eleve eleve = this.jPanAffStageEleve.getlEleve().get(index);

			// On le retire du stage.
			if (EleveJdbc.modifierStage(Connexion.getConnexion(), eleve, null)){
				this.jPanAffStageEleve.getPanJTable().getDefaultTableModel().removeRow(
					this.jPanAffStageEleve.getPanJTable().getJtable().getSelectedRow());
			}
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		
	}
}